package comp.movel.ubiqua.bd;

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import comp.movel.ubiqua.ws.JogadorWSDL;

public class RankingDAO {
	private static SQLiteDatabase db;

	public RankingDAO(Context context){
		inicializar(context);
	}
	
	public static void inicializar(Context context) {
		db = context.openOrCreateDatabase("ranking.db",
				SQLiteDatabase.CREATE_IF_NECESSARY, null);
		criarTabela(db, "ranking");
	}

	private static void criarTabela(SQLiteDatabase banco, String nomeTabela) {
		try {
			banco.beginTransaction();
			String tabelaSql = "CREATE TABLE IF NOT EXISTS "
					+ nomeTabela
					+ " (nome VARCHAR NOT NULL , pontuacao INTEGER NOT NULL, PRIMARY KEY (nome, pontuacao));";
			banco.execSQL(tabelaSql);
			banco.setTransactionSuccessful();
		} finally {
			banco.endTransaction();
		}
	}
	
	public ArrayList<JogadorWSDL> receberRanking() {
		ArrayList<JogadorWSDL> jogador = new ArrayList<JogadorWSDL>();
		Cursor cursor = db.query("ranking",
				new String[] { "nome", "pontuacao" }, null, null, null, null,
				"pontuacao desc", "" + 5);
		cursor.moveToFirst();
		if (cursor.getCount() == 0) {
			cursor.close();
			return null;
		}
		do {
			JogadorWSDL aux = new JogadorWSDL(cursor.getString(cursor
					.getColumnIndex("nome")), cursor.getInt(cursor
					.getColumnIndex("pontuacao")));
			jogador.add(aux);
		} while (cursor.moveToNext());
		cursor.close();
		return jogador;
	}

	public void atualizarRanking(String nome, int pontuacao) {
		Cursor cursor = db.query("ranking",
				new String[] { "nome", "pontuacao" }, "nome = '" + nome + "'",
				null, null, null, "pontuacao desc");
		cursor.moveToFirst();
		if (cursor.getCount() == 0) {
			db.insert("ranking", null, getValues(nome, pontuacao));
		} else {
			int oldPontuacao = cursor
					.getInt(cursor.getColumnIndex("pontuacao"));
			db.update("ranking", getValues(nome, pontuacao + oldPontuacao),
					"nome = '" + nome + "'", null);
		}
		cursor.close();
	}

	private ContentValues getValues(String nome, int pontuacao) {
		ContentValues values = new ContentValues();
		values.put("nome", nome);
		values.put("pontuacao", pontuacao);
		return values;
	}

}
